package cn.quevo.cube.provide.data.validate;

import cn.quevo.common.lang.BooleanUtils;
import cn.quevo.common.lang.StringUtils;
import cn.quevo.cube.provide.data.entity.dto.ColumnValidateDto;
import cn.quevo.cube.provide.exception.ColumnCheckException;
import cn.quevo.cube.provide.exception.response.ColumnExceptionResponse;

/**
 * 字段数据验证基础实现
 *
 * @author July july_sky@foxmail.com
 * @version 1.0
 * @date 2018/12/14 5:46 PM
 * @Copyright 湘豫（北京）科技有限公司版权所有.All Rights Reserved.
 */
public abstract class AbstractColumnDataValidate implements ColumnDataValidate {

    @Override
    public void validate(ColumnValidateDto columnValidateDto) {
        if (BooleanUtils.isTrue(columnValidateDto.getRequiredYn()) && StringUtils.isBlank(columnValidateDto.getValue())) {
            if (StringUtils.isBlank(columnValidateDto.getDefValue())) {
                throw new ColumnCheckException(ColumnExceptionResponse.REQUIRED_EMPTY.getCode(), columnValidateDto.getColumnLabel().concat("不能为空"));
            }
            columnValidateDto.setValue(columnValidateDto.getDefValue().trim());
        }
        if (StringUtils.isBlank(columnValidateDto.getValue())) {    // 如果值为空，且非必填，则无需任何验证
            return;
        }
        columnValidateDto.setRealValue(columnValidateDto.getValue());
        this.checked(columnValidateDto);
    }

    /**
     * 子类需要实现的方法
     *
     * @param columnValidateDto
     * @author July july_sky@foxmail.com
     * @date 2018/12/14 5:59 PM
     * @Copyright 湘豫（北京）科技有限公司版权所有.All Rights Reserved.
     */
    protected abstract void checked(ColumnValidateDto columnValidateDto);
}
